package com.newshub.business.service;

import com.newshub.business.dto.SourceQueryDTO;
import com.newshub.business.entity.Source;
import java.util.List;
import java.util.Map;

/**
 * 新闻源服务接口
 */
public interface SourceService {
    
    /**
     * 分页查询新闻源
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    List<Source> getSourcesByPage(SourceQueryDTO queryDTO);
    
    /**
     * 统计分页查询的总数
     * @param queryDTO 查询条件
     * @return 总数
     */
    long countSourcesByPage(SourceQueryDTO queryDTO);
    
    /**
     * 根据ID查询新闻源
     * @param id 新闻源ID
     * @return 新闻源对象
     */
    Source getSourceById(Integer id);
    
    /**
     * 根据代码查询新闻源
     * @param code 新闻源代码
     * @return 新闻源对象
     */
    Source getSourceByCode(String code);
    
    /**
     * 根据名称查询新闻源
     * @param name 新闻源名称
     * @return 新闻源对象
     */
    Source getSourceByName(String name);
    
    /**
     * 新增新闻源
     * @param source 新闻源对象
     * @return 是否成功
     */
    boolean addSource(Source source);
    
    /**
     * 更新新闻源
     * @param source 新闻源对象
     * @return 是否成功
     */
    boolean updateSource(Source source);
    
    /**
     * 删除新闻源
     * @param id 新闻源ID
     * @return 是否成功
     */
    boolean deleteSource(Integer id);
    
    /**
     * 批量删除新闻源
     * @param ids 新闻源ID列表
     * @return 是否成功
     */
    boolean deleteBatchSources(List<Integer> ids);
    
    /**
     * 更新新闻源状态
     * @param id 新闻源ID
     * @param status 新状态
     * @return 是否成功
     */
    boolean updateSourceStatus(Integer id, Integer status);
    
    /**
     * 获取所有启用的新闻源
     * @return 新闻源列表
     */
    List<Source> getAllEnabledSources();
    
    /**
     * 根据区域ID查询新闻源
     * @param regionId 区域ID
     * @return 新闻源列表
     */
    List<Source> getSourcesByRegionId(Integer regionId);
    
    /**
     * 获取所有新闻源
     * @return 新闻源列表
     */
    List<Source> getAllSources();

    // ==================== 统计功能 ====================
    
    /**
     * 获取信源分布统计数据
     * @return 信源分布统计数据
     */
    Map<String, Object> getSourceDistributionStats();
}